import java.util.Stack;

public class MinStack {
    //设计一个支持 push ，pop ，top 操作，
    // 并能在常数时间内检索到最小元素的栈。
    private Stack<Integer> stack1;
    private Stack<Integer> minstack;
    public MinStack() {
        stack1 = new Stack<>();
        minstack = new Stack<>();

    }
    //void push(int val) 将元素val推入堆栈。
    public void push(int val) {
        stack1.push(val);
        //当栈为空时把元素放入最小栈，之后只放入比第一个元素小的数，
        if(minstack.empty()){
            minstack.push(val);
        }else {
           int x =  stack1.peek();
           if(val <= x){
               minstack.push(val);
           }
        }
    }
    //void pop() 删除堆栈顶部的元素。
    //若弹出元素和最小栈顶元素一样则最小栈也要删
    public void pop() {
        if(!stack1.empty()){
            int  x = stack1.pop();
            if(x==minstack.peek()){
                minstack.pop();
            }
        }
    }
    //int top() 获取堆栈顶部的元素。
    public int top() {
        if(!stack1.empty()){
            int x = stack1.peek();
            return x;
        }else {
            return -1;
        }
    }
    //int getMin() 获取堆栈中的最小元素。
    public int getMin() {
        if(!minstack.empty()){
           return minstack.peek();
        }else {
            return -1;
        }
    }

}
